Векторный DSL
Надо как-то назвать язык. Назову его О. Задачи языка:
— Предоставлять конфигурирование системы: выделение кольцевых буферов, аллокация компилированных файлов в виде зада для планировщика, создание таймеров, посылание сообщений между корами по скоростной шине, конфигурация это шины.
— Выступать в роли векторного DSL для K Cell. Каждая K Cell — это по сути вектор или растовский итератор, поддерживающий все его интерфейсы и поддающийся векторизации. Есть также библиотеки распаралеливания этих итераторов.
Сейчас язык парсает основные диалекты K, Q, oK.js, а также Kona. В К мире не приянято писать декларативные парсеры, так как строятся ручные интерпетаторы с встроеным токенайзером. Но поскольку мы воспринимам К программу как DSL к итераторам, нам нужно все AST сразу для ленивого выполнения, поэтому так или иначе строить его нужно. Ну и еще листы в векторы сворачивать, все это тоже можно эффективно делать на этапе парсинга.
Покажу на примере, например нам нужно вычислить скалярное произведение двух векторов:
А теперь представим вместо очередей Ioverb устройства, индексы кольцевых буферов в стиле как мы идектируем потоки ввода выводы (0: и 1:) — "1212:" или "3600:".
Это транформируется в растовский:
И в итоге векторизируется LLVM в: